クランバトル/周回スコア計算の変更点

  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • 移動:バックアップ
  • 最新のバージョン:2025-02-11 20:18:02
  • バージョン:(Rev:5ezYRz0GwP)2025-02-11 14:18:57

OldNew差分
11* 周回スコア表の計算プログラム [#lhgno88]
22クランバトル第41回(2021/07)以降に対応しています。
33第79回(2024/09)の調整まで実装。
4+プログラミング言語Pythonの仕様により、コピペした後にインデントを調整する必要があります。
45
56 #!/usr/bin/env python3
67
4344 boss_hp.append( [ 9,12,15,18,23] )
4445 boss_hp.append( [12,15,20,23,30] )
4546 boss_hp.append( [35,40,45,50,58] )
46- elif version >= 202307:
47+ elif version >= 202304:
4748 boss_hp.append( [ 6, 8,10,12,15] )
4849 boss_hp.append( [ 8,10,13,15,20] )
4950 boss_hp.append( [20,22,25,28,30] )
5455 # 4段階目(全5段階の場合のみ)
5556 if False:
5657 pass
57- elif version >= 202307:
58+ elif version >= 202304:
5859 pass
5960 elif version >= 202204:
6061 boss_hp.append( [22,23,27,29,31] )
7172 boss_hp.append( [540,560,600,620,640] )
7273 elif version >= 202309:
7374 boss_hp.append( [270,280,300,310,320] )
74- elif version >= 202307:
75+ elif version >= 202304:
7576 boss_hp.append( [200,210,230,240,250] )
7677 elif version >= 202209:
7778 boss_hp.append( [145,150,175,195,210] )
8990 boss_mult.append( [ Fraction(x,10) for x in [16,16,18,19,20] ] )
9091 if False:
9192 pass
92- elif version >= 202307:
93+ elif version >= 202304:
9394 boss_mult.append( [ Fraction(x,10) for x in [20,20,21,21,22] ] )
9495 boss_mult.append( [ Fraction(x,10) for x in [45,45,47,48,50] ] )
9596 else:
104105 pass
105106 elif version >= 202309:
106107 loop_sep = [ 0, 6,22]
107- elif version >= 202307:
108+ elif version >= 202304:
108109 loop_sep = [ 3, 9,25]
109110 elif version >= 202112:
110111 loop_sep = [ 3,10,30,38]
129130
130131 stage_scores = [] # 各段階の、全ボスを1体ずつ倒した場合の合計スコア
131132 stage_scores_diff = [] # 各段階の途中周回での、完了に必要な最大値と最小値の差
132- for i in range(len(loop_sep)+1):
133- score = 0
133+ for i in range(len(boss_hp)):
134+ scores = []
134135 for hp, mult in zip(boss_hp[i], boss_mult[i]):
135- score += round(hp_unit * hp * mult)
136- score_diff = score - round(hp_unit * boss_hp[i][0] * boss_mult[i][0])
136+ scores.append( round(hp_unit * hp * mult) )
137+ score = sum(scores)
138+ score_diff = score - min(scores)
137139 stage_scores.append(score)
138140 stage_scores_diff.append(score_diff)
139141
140142 loop_scores = [] # 各周回の、周回完了に必要なスコアの最小値と最大値の対
143+ stage_loop_begin = [0] + loop_sep[:]
144+ stage_loop_end = loop_sep[:] + [loop_max+1]
141145 score = 0
142146 for i in range(len(loop_sep)+1):
143- loop_begin = 0
144- if i > 0:
145- loop_begin = loop_sep[i-1]
146- loop_end = loop_max+1
147- if i < len(loop_sep):
148- loop_end = loop_sep[i]
147+ loop_begin = stage_loop_begin[i]
148+ loop_end = stage_loop_end[i]
149+ if loop_begin >= loop_end:
150+ continue
149151 for j in range(loop_end - loop_begin - 1):
150152 score += stage_scores[i]
151153 score_min = score
152154 score_max = score + stage_scores_diff[i]
153155 loop_scores.append( (score_min, score_max) )
154- if i < len(loop_sep) and loop_begin != loop_end:
156+ if i < len(loop_sep):
155157 score += stage_scores[i]
156158 loop_scores.append( (score, score) )
157159
159161 # ここから計算結果の出力
160162 #
161163
162- for i in range(len(loop_scores)):
163- iloop = i+1
164- score_min, score_max = loop_scores[i]
164+ for iloop,v in enumerate(loop_scores,1):
165+ score_min, score_max = v
165166 if score_min == score_max:
166167 print( '|{:d}|>|CENTER:{:,d}|'.format(iloop, score_min) )
167168 else:
スポンサー